package com.gzsxy.JUC.tvolatile;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * volatile z只保证可见性、不保证原子性
 */
public class VDemo02 {


//    private volatile static int num =0;

    //    public  static void add(){
//        num++;
//    }
    private volatile static AtomicInteger num = new AtomicInteger();

    public static void add() {
//        num++;  //不是一个原子性操作
        num.getAndIncrement();  //AtomicInteger +1 方法 CAS
    }


    public static void main(String[] args) {

        //理论上num结果为2万
        for (int i = 0; i < 20; i++) {
            new Thread(() -> {
                for (int j = 0; j < 1000; j++) {
                    add();
                }

            }).start();
        }

        while (Thread.activeCount() > 2) {
            Thread.yield(); //“Thread.yield() 方法,使当前线程由执行状态,变成为就绪状态,
        }
        System.out.println(Thread.currentThread().getName() + " " + num);
    }
}
